package yolorpc.registry;


import yolorpc.model.ServiceMetaInfo;

import java.util.List;
import java.util.concurrent.ExecutionException;

/**
 * @Program: RPC
 * @description: 注册中心接口
 * @author: yolo
 * @create: 2025-04-28 14:38
 **/
public interface Registry {

    /**
     * @descript 初始化
     * @author yolo
     * @date 2025/4/28 14:42
     * @param registryConfig
     * @return void
     **/
    void init(RegistryConfig registryConfig);

    /**
     * @descript 服务注册（服务端）
     * @author yolo
     * @date 2025/4/28 14:43
     * @param serviceMetaInfo
     * @return void
     **/
    void register(ServiceMetaInfo serviceMetaInfo) throws Exception;

    /**
     * @descript 服务注销（服务端）
     * @author yolo
     * @date 2025/4/28 14:43
     * @param serviceMetaInfo
     **/
    void unRegister(ServiceMetaInfo serviceMetaInfo);

    /**
     * @descript 服务发现（获取某服务的所有节点，消费端）
     * @author yolo
     * @date 2025/4/28 14:44
     * @param serviceKey
     * @return List<ServiceMetaInfo>
     **/
    List<ServiceMetaInfo> serviceDiscovery(String serviceKey) throws Exception;

    /**
     * @descript 服务销毁
     * @author yolo
     * @date 2025/4/28 14:44
     **/
    void destroy();

    /**
     * @descript 心跳机制
     * @author yolo
     * @date 2025/4/30 10:47
     * @param
     * @return void
     **/
    void heartBeat();

    /**
     * @descript 监听（消费端）
     * @author yolo
     * @date 2025/5/6 10:34
     * @param serviceNodeKey
     * @return void
     **/
    void watch(String serviceNodeKey);
}
